#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPlainTextEdit>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 创建一个菜单栏，包含文件的打开和保存操作
    QMenuBar* menuBar = this->menuBar();
    // 添加菜单
    QMenu* menu = new QMenu("文件");
    menuBar->addMenu(menu);
    // 添加菜单项
    QAction* action1 = new QAction("打开");
    QAction* action2 = new QAction("保存");
    menu->addAction(action1);
    menu->addAction(action2);
    // 添加一个输入框到中间，将文件打开内容显示到输入框上，将输入框上的内容保存到文件里
    edit = new QPlainTextEdit();
    // 铺满窗口
    this->setCentralWidget(edit);
    // 设置文件打开和保存的操作，关联槽函数
    connect(action1, &QAction::triggered, this, &MainWindow::handle1);
    connect(action2, &QAction::triggered, this, &MainWindow::handle2);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handle1()
{
    // 点击了打开操作
    // 先弹出文件打开的框，让用户选择打开哪个文件
    QString path = QFileDialog::getOpenFileName();
    // 将文件路径回显到状态栏里
    ui->statusbar->showMessage(path);
    // 根据用户选择的文件，构建一个 QFile 对象，并打开文件
    QFile file(path);
    bool ret = file.open(QFile::ReadOnly);
    // 文件打开失败：可能是权限的原因
    if(!ret)
    {
        ui->statusbar->showMessage(path+"打开失败");
        return;
    }
    // 打开成功，直接读取文件里面的全部内容，显示到输入框中
    QString text = file.readAll();
    // 不要忘记关闭文件
    file.close();
    edit->setPlainText(text);
}

void MainWindow::handle2()
{
    // 点击了保存操作
    // 先弹出文件保存的框，让用户选择保存在哪个位置，并获取保存的路径
    QString path = QFileDialog::getSaveFileName();
    // 将文件路径回显到状态栏里
    ui->statusbar->showMessage(path);
    // 获取输入框的内容
    QString text = edit->toPlainText();
    // 构建成一个文件，并打开文件
    QFile file(path);
    bool ret = file.open(QFile::WriteOnly);
    // 文件打开失败：可能是权限的原因
    if(!ret)
    {
        ui->statusbar->showMessage(path+"打开失败");
        return;
    }
    // 打开成功，往文件中写内容，需要转成 QByteArray
    file.write(text.toUtf8());
    // 不要忘记关闭文件
    file.close();
}

